# 用户输入验证异常处理示例

class InputValidationError(Exception):
    """自定义异常：输入验证错误"""
    pass

def validate_username(username):
    """验证用户名
    规则：
    - 不能为空
    - 长度在3-20个字符之间
    - 只能包含字母、数字和下划线
    """
    if not isinstance(username, str):
        raise TypeError("用户名必须是字符串类型")
    
    if not username.strip():
        raise InputValidationError("用户名不能为空")
    
    if not 3 <= len(username) <= 20:
        raise InputValidationError("用户名长度必须在3-20个字符之间")

def validate_age(age):
    """验证年龄
    规则：
    - 必须是整数
    - 范围在0-120之间
    """
    try:
        age = int(age)
    except ValueError:
        raise InputValidationError("年龄必须是整数")
    
    if not 0 <= age <= 120:
        raise InputValidationError("年龄必须在0-120之间")
    
    return age

def get_user_info():
    """获取用户信息的示例函数
    演示如何处理用户输入验证的异常
    """
    try:
        username = input("请输入用户名：")
        validate_username(username)
        
        age = input("请输入年龄：")
        age = validate_age(age)
        
        print("\n输入验证通过！")
        print(f"用户名：{username}")
        print(f"年龄：{age}")
        
    except InputValidationError as e:
        print(f"\n输入验证错误：{str(e)}")
    except TypeError as e:
        print(f"\n类型错误：{str(e)}")
    except Exception as e:
        print(f"\n发生未知错误：{str(e)}")

def main():
    print("=== 用户信息输入验证示例 ===")
    while True:
        get_user_info()
        if input("\n是否继续？(y/n): ").lower() != 'y':
            break
    print("\n程序结束")

if __name__ == "__main__":
    main()